Synthesis of cyclic combinational circuits

ABSTRACT

A method for the synthesis of multi-level combinational circuits with cyclic topologies. The techniques, applicable in logic synthesis, and in particular in the structuring phase of logic synthesis, optimize a multi-level description, introducing feedback and potentially optimizing the network.

REFERENCE TO PRIORITY DOCUMENT

[0001] This application claims the benefit of priority of co-pending U.S. Provisional Patent Application Serial No. 60/431,167 entitled “A Method and Computer Program for the Design of Combinational Circuits with Cycles” filed Dec. 5, 2002 and claims the benefit of priority of co-pending U.S. Provisional Patent Application Serial No. 60/520,493 entitled “Combinational Circuits with Feedback” filed Nov. 14, 2003. Priority of the respective filing dates of Dec. 5, 2002 and Nov. 14, 2003 are hereby claimed, and the disclosures of the Provisional Patent Applications are hereby incorporated by reference.

BACKGROUND

[0002] 1. Field of the Invention

[0003] The invention relates generally to logic synthesis, and more particularly, to the synthesis of combinational circuits with cycles.

[0004] 2. Description of the Related Art

[0005] Increased complexity in digital logic circuits make the use of logic synthesis essential for all but the simplest designs. Conventional logic circuits are made up of combinational and sequential circuits. A type of logic circuit, referred to as a combinational circuit, has outputs that depend only on the current values of the circuit's inputs. Because their outputs depend only on the current values of their inputs, combinational circuits are referred to as being “memoryless”. Another type of logic circuit, referred to as a sequential circuit, has outputs that may depend upon past as well as current values of the circuit's inputs, in other words a sequential circuits has “memory”. Combinational circuits are generally thought of as acyclic, that is as feed-forward or loop-free, structures while sequential circuits are thought of as cyclic structures that include loops. In fact, “combinational” and “sequential” are often defined in this way.

[0006] In a conventional logic synthesis system, a front-end process accepts a high level description of the design, such as a hardware description language (HDL) design that typically specifies input variables, internal variables, and output variables, and converts the high level description into a set of boolean equations that describe the system. The logic synthesis system, or tool, then optimizes a multilevel network description of the design that generally includes both combinational and sequential circuits. The optimization procedures generally are applied to produce smaller, faster representations of the design. A back-end process produces a final circuit design based on the technology of the target device in which the design will be implemented.

[0007] As designs become larger and more complex, synthesis tools need to design circuits that are optimized according to a number of possible criteria. Minimization of the area that a circuit occupies on a target device allows for more complex designs to be implemented on a device of a given size. Also, reducing the area required to implement an existing design may allow it to be implemented on a smaller target device. Minimizing the delay of a circuit allows for a higher clock speed, resulting in a faster, more efficient circuit. Other optimization criteria can include reducing power consumption, increased fault tolerance, and increased testability.

[0008] Therefore, there is a need for an improved method and apparatus for synthesis of circuits

SUMMARY

[0009] A combinational circuit is produced by determining cyclic parameters and by synthesizing a combinational circuit in accordance with the determined cyclic parameters. This improves the efficiency for designing, synthesizing, and implementing cyclic combinational circuits.

[0010] If desired, the cyclic parameters can be determined by defining input variables, defining output variables, and then defining a set of relationships between the input and output variables, whereby the set of relationships include cycles. This can efficiently specify cyclic combinational circuits.

[0011] Other features and advantages of the present invention should be apparent from the following description of the preferred embodiment, which illustrates, by way of example, the principles of the invention.

BRIEF DESCRIPTION OF THE DRAWINGS

[0012]FIG. 1 is a diagram illustrating a truth table of a standard 7-segment display decoder.

[0013]FIG. 2 is a network node diagram illustrating a network of the 7-segment display decoder that includes cycles in accordance with the invention.

[0014]FIG. 3 is another network node diagram a network of the 7-segment display decoder.

[0015]FIG. 4 is yet another network node diagram a network of the 7-segment display decoder.

[0016]FIG. 5 is a circuit diagram of an example illustrating advantages of cyclic combinational networks.

[0017]FIG. 6 is a network node diagram illustrating cyclic and acyclic networks.

[0018]FIG. 7 is a circuit diagram of a cyclic combinational circuit.

[0019]FIG. 8 is a network node diagram illustrating an acyclic substitution order.

[0020]FIG. 9 is a network node diagram illustrating an unordered substitution.

[0021]FIG. 10 is a network node diagram illustrating an ordering of a network.

[0022]FIG. 11 is a network node diagram illustrating another ordering of a network.

[0023]FIG. 12 is a network node diagram of yet another ordering of a network

[0024]FIG. 13 is a table illustrating a relation of nodes in a three node network

[0025]FIG. 14 is a set of network node diagrams illustrating a “break-down” search strategy.

[0026]FIG. 15 is a flow diagram of the “break-down” search strategy.

[0027]FIG. 16 is a set of network node diagrams illustrating a “build-up” search strategy.

[0028]FIG. 17 is a flow chart of the “build-up” search strategy.

[0029]FIG. 18 is an example network node diagram

[0030]FIG. 19 is an example network node diagram.

[0031]FIG. 20A is yet another example node diagram.

[0032]FIG. 20B is one case of the network node diagram of FIG. 20.

[0033]FIG. 20C is another case of the network node diagram of FIG. 20.

[0034]FIG. 20D is another case of the network node diagram of FIG. 20.

[0035]FIG. 20E is another case of the network node diagram of FIG. 20.

[0036]FIG. 21 is an example of a network node diagram.

[0037]FIG. 22 is another example of a network node diagram.

[0038]FIG. 23 is a block diagram illustrating an example of a circuit of the network of FIG. 5.

[0039]FIG. 24 is a block diagram illustrating an example of a circuit of the network described in FIG. 14.

[0040]FIG. 25 is a diagram illustrating a cyclic solution for example target functions.

[0041]FIG. 26 is a block diagram of a computer system that implements the circuit synthesis of the invention.

DETAILED DESCRIPTION

[0042] Combinational circuits are generally thought of as acyclic structures and sequential circuits as cyclic structures. A collection of logic gates connected in an acyclic, or loop-free, topology is combinational because, regardless of the initial values of its inputs, once the inputs are fixed the signals propagate to the outputs. There is a direct correspondence between the electrical behavior of the circuit and the abstract notion of the boolean functions that it implements. The behavior of a circuit with feedback, or cycles, is generally more complicated. Such a circuit may exhibit sequential behavior, such as an R-S Latch, or its may be unstable, such as an oscillator.

[0043] Yet, cyclic circuits can be combinational. For example, FIG. 1 illustrates a truth table of a standard 7-segment display decoder. The decoder has four input signals x₀, x₁, x₂, and X₃ that are used to specify a number between 0 and 9. The display also has seven output signals a, b, c, d, e, f, and g that specify which segments to illuminate in an LED display. The output signals, expressed as acyclic functions of the input signals, for this circuit are:

a={overscore (x)} ₀ x ₁ {overscore (x)} ₃ {overscore (x)} ₂({overscore (x)} ₁({overscore (x)} ₃ +x ₀)+{overscore (x)} ₀ x ₁)

b={overscore (x)} ₃({overscore (x)} ₁ {overscore (x)} ₂ +{overscore (x)} ₀ x ₂

c=x ₀ {overscore (x)} ₁ {overscore (x)} ₂ +{overscore (x)} ₀(x ₃(x ₂ +x ₁)+{overscore (x)} ₁ {overscore (x)} ₃)

d=x ₀ {overscore (x)} ₁ {overscore (x)} ₂ +{overscore (x)} ₀(x ₁({overscore (x)} ₃ +{overscore (x)} ₂)+{overscore (x)} ₁ x ₂)

e={overscore (x)} ₁ {overscore (x)} ₂ {overscore (x)} ₃ +{overscore (x)} ₀(x ₁ {overscore (x)} ₂ x ₃ +x ₂({overscore (x)} ₃ +{overscore (x)} ₁))

ƒ={overscore (x)} ₀({overscore (x)} ₂ {overscore (x)} ₃ +x ₂ x ₃ +{overscore (x)} ₁)+{overscore (x)} ₁ {overscore (x)} ₂

g={overscore (x)} ₀(x ₃ +x ₁)+{overscore (x)} ₁ {overscore (x)} ₂

[0044] The area required to implement a design, or a network, on a target device is correlated to the cost of the network. A typical technique used to estimate the cost of a network is to count the number of literals in the expressions of the functions. In the previous example of implementing the standard 7-segment display as acyclic functions, the cost is 55.

[0045]FIG. 2 illustrates a network of the 7-segment display decoder that includes cycles in accordance with the invention. The output signals expressed as cyclic functions of the input signals for this circuit are:

a={overscore (x)} ₀ {overscore (x)} ₃ {overscore (c)}+{overscore (x)} ₁ c

b={overscore (x)} ₀({overscore (x)} ₁ {overscore (x)} ₂ +x ₁ {overscore (x)} ₃)

c=x ₀ x ₂ {overscore (x)} ₃ +{overscore (x)} ₂({overscore (x)} ₁ x ₃ +e)

d=x ₁ {overscore (x)} ₂ {overscore (x)} ₃ +a(₂ +x ₃)

e=x ₀ {overscore (x)} ₃ d+b

ƒ={overscore (x)} ₂ c+{overscore (x)} ₃ {overscore (e)}

g=x ₀ {overscore (x)} ₃ +a

[0046] Referring to FIG. 2, it is noted that there is a cycle through nodes a, d, e, and c. Nevertheless, the circuit is combinational. There is feedback in a topological sense but not in an electrical sense.

[0047] That the circuit is combinational can be illustrated by considering specific input values. For example, FIG. 3 illustrates the network when x₃=0, x₂=0, x₁=0, and x₀=0, corresponding to the digit 1 on the 7-segment display. As shown in FIG. 3, with this set of inputs the network has no cycles and is combinational.

[0048]FIG. 4 illustrates the network of FIG. 2 for another set of input signals. When the input signals are x₃=0, x₂=10, x₁=0, and x₀=1, corresponding to the digit 5 on the 7-segment display, the network simplifies to that shown in FIG. 4. As shown in FIG. 4, with this set of inputs the network again has no cycles and is combinational. In a similar manner all possible combinations of input signals can be shown to result in networks having no cycles and that are therefore combinational circuits.

[0049] An advantage to implementing a cyclic combinational circuit over an acyclic circuit is that the cost of the cyclic combinational circuit will usually be less than the corresponding acyclic circuit. For example, the cost of the cyclic combinational network illustrated in FIG. 2, expressed by counting the number of literals in the corresponding expression describing the 7-segment display, is 34 compared to a cost of 55 for the corresponding acyclic circuit. For additional comparison the Berkeley SIS package implemented an acyclic network for the 7-segment display with a cost of 37 when using the command “full_simplify” compared to the cyclic combinational circuit cost of 34. See E. Sentovich, et. al., SIS: A System For Sequential Circuit Synthesis, Tech. Rep., UCB/ERL M92/41, Electronics Research Lab, University of California, Berkeley, 1992; and Brayton et. al., “Multi-level Logic Synthesis”, Proceedings of the IEEE, Vol. 78, No. 2, pp 264-300, 1990.

[0050] Another example illustrating advantages of cyclic combinational networks is shown in FIG. 5. The network illustrated in FIG. 5 has three nodes, g₁, g₂ and g₃, producing output functions ƒ₁, ƒ₂ and ƒ₃, respectively. Note that there is a cycle, g₁ receives ƒ₃ as an input, g₂ receives ƒ₁ as an input, and g₃ receives ƒ₂ as an input. Nevertheless the circuit is combinational. For example, note that if a=0, then g₁ does not depend on ƒ₃; if b=0 then g₂ does not depend on ƒ₁; if a=1 and b=1, then g₃ does not depend on ƒ₂. The circuit implements the functions

ƒ₁(a,b,c)=a{overscore (b)}c+ab{overscore (c)},

ƒ₂(a,b,c)={overscore (a)}b+a{overscore (b)}+bc,

ƒ₃(a,b,c)=ab+a{overscore (c)}+b{overscore (c)}.

[0051] This network can be mapped to a circuit consisting of 9 fan-in two gates, as shown in FIG. 23.

[0052] As shown by these examples, introducing loops, or cycles, in the design of combinational circuits is advantageous. The intuition behind this is that with feedback, all nodes can potentially benefit from work done elsewhere; without feedback, nodes at the top of the hierarchy must be constructed from scratch. FIG. 6 is a diagram illustrating differences between cyclic and acyclic structures, that is without input from other nodes within the network. In the cyclic network 602, g₁ depends on g₃, g₂ depends on g₁, and g₃ depends on g₂. In the acyclic network 604, g₁ does not depend upon the other nodes. In this example, because g₁ does not depend upon the other nodes in the acyclic network 604 it generally requires additional gates to implement the acyclic network 604 over the number of gates required to implement the cyclic network 602 where g₁ does depend upon the other nodes in the network.

[0053] Chronology of Cyclic Combinational Circuits

[0054] As early as 1960, it was recognized that permitting cyclic topologies could reduce the size of relay networks. See R. A. Short, “A Theory of Relations Between Sequential and Combinational Realizations of Switching Functions,” Stanford Electronics Laboratories, Technical Report 098-1, 1960, pp. 33-34, 102-114. Then, around 1970, it was argued that cyclic combinational circuits could have fewer logic gates than acyclic forms. See D. A. Huffman, “Combinational circuits with feedback,” Recent Developments in Switching Theory, A. Mukhopadhyay, pp. 27-55, 1971; and W. H. Kautz, “The Necessity of Closed Circuit Loops in Minimal Combinational Circuits,” IEEE Trans. Comp., Vol. C-19, pp. 162-166, 1970. Unfortunately, the examples given, although plausible, did not meet the rigorous condition for stability and uniqueness. It has been demonstrated that the example given by Kautz fails the test, and may not work correctly. See T. R. Shiple, “Formal Analysis of Synchronous Circuits,” Ph.D. Thesis, University of California, Berkeley, 1996. Similar arguments have been made for the example given by Huffman.

[0055] In 1977 a convincing example of a family of cyclic combinational circuits was presented. See R. L. Rivest, “The Necessity of Feedback in Minimal Monotone Combinational Circuits,” IEEE Trans. Comp., Vol. C-26, No. 6, pp. 606-607, 1977. The example family of cyclic combinational circuits presented consisted of a circuit of n AND gates, where n is an odd integer greater than 1, alternating with n OR gates in a single cycle, with n inputs repeated twice. An example circuit of this type, for n=3, is shown in FIG. 7. It has been shown that the circuit illustrated in FIG. 7 is combinational and each gate computes a distinct output function depending on all n variables. Significantly, it has also been proven that the circuit of FIG. 7 is optimal in terms of the number of fan-in two gates used. The cyclic circuit shown in FIG. 7 is implemented with 2 n, or 6, fan-in two gates while the smallest acyclic circuit implementing the same 2 n output functions requires at least (3 n−2), or 7, fan-in two gates. Thus, asymptotically, this cyclic circuit is two-thirds the size of any equivalent acyclic form.

[0056] In 1992, it was observed that cycles sometimes occur in combinational circuits synthesized from high-level designs, as well as circuits with bus structures. See L. Stok, “False Loops Through Resource Sharing,” Int'l Conf. Computer-Aided Design, Santa Clara, 1992, pp. 345-348. Cycles were observed in designs that were optimized to re-use functional units. For instance, given functional units ƒ(x) and g(x), these could be operations such as “add” and “shift” on a datapath x, and a controlling variable y, one might implement

z(x)=if y then ƒ(g(x)) else g(ƒ(x)).

[0057] Feedback in such designs is carefully contrived, typically occurring when functional units are connected in a cyclic topology. In was also noted that while high-level synthesis tools and/or human designers sometimes create such cyclic designs, logic synthesis and verification tools used at later stages in the design process have great difficulty because of cycles. Recently, it has been noted that cycles may arise in circuits synthesized from synchronous languages such as Esterel. See S. A. Edwards, “Making Cyclic Circuits Acyclic,” Design Automation Conf., 2003. Because of the difficulties encountered by logic synthesis and verification tools, the solution to this problem is generally to disallow the creation of cycles in the resource-sharing phase of high-level synthesis, or to transform cyclic designs into acyclic designs.

[0058] In 1994 a technique for analyzing cyclic combinational circuits was proposed. See S. Malik, “Analysis of Cyclic Combinational Circuits,” IEEE Trans. Computer-Aided Design, Vol. 13, No. 7, pp. 950-956, 1994. It has been proved that deciding whether a cyclic circuit is combinational or not is co-NP-complete. An efficient analysis algorithm was formulated based on ternary-valued simulation to decide whether a circuit is combinational. This work also addressed the issue of timing analysis, as well as fault testing. See A. Raghunathan, P. Ashar and S. Malik, “Test Generation for Cyclic Combinational Circuits,” IEEE Trans. Computer-Aided Design, Vol. 14, No. 11, pp. 1408-1414, 1995.

[0059] Work in this area continued and in 1996 the earlier work was set on firm theoretical footing. See T. R. Shiple, “Formal Analysis of Synchronous Circuits,” Ph.D. Thesis, University of California, Berkeley, 1996. It was shown that the class of circuits that Malik's procedure decides are combinational are precisely those that are well behaved electrically, according to the up-bounded inertial delay model. See J. A. Brzozowski and C.-J. H. Seger, Asynchronous Circuits, Springer-Verlag, 1995. Refinements were proposed refinements to Malik's algorithm and extended the concept to sequences of inputs, rather than single input vectors, making the model more permissive in the case of combinational logic embedded in sequential systems. See T. R. Shiple, V. Singhal, R. K. Brayton, and A. L. Sangiovnni-Vincentelli, “Analysis of Combinational Cycles in Sequential Circuits,” IEEE Int'l Symp Circuits and Systems, Vol. 4, pp. 592-595, 1996; and T. R. Shiple, G. Berry and H. Touati, “Constructive Analysis of Cyclic Circuits,” European Design and Test Conf., 1996.

[0060] To summarize, combinational circuits have been observed, and their behavior formalized, well-understood and accepted. However, except for relatively simple cases of feedback at the level of functional units, combinational circuits are not designed with feedback in practice. Combinational circuits that have been designed with feedback have simple and regular feedback structures stemming from high-level constructs. See S. A. Edwards, “Making Cyclic Circuits Acyclic,” Design Automation Conf., 2003; and A. Srinivasan and S. Malik, “Practical Analysis of Cyclic Combinational Circuits,” IEEE Custom Integrated Circuits Conf., pp. 381-384, 1996. No one has attempted the synthesis of circuits with feedback at the logic level.

[0061] Feedback at the Logic Level

[0062] In accordance with the invention combinational circuits are synthesized to intentionally incorporate cycles. A variety of cyclic combinational examples have been generated that are stable and have fewer gates than any equivalent acyclic circuits. Most notably, a family of cyclic circuits has been generated that is asymptotically one half the size of the corresponding acyclic circuits.

[0063] This family of cyclic combinational circuits are not isolated examples: cyclic topologies are superior to acyclic topologies for a broad range of networks, from randomly generated designs, to small and large scale networks encountered in practice.

[0064] A general methodology is described for the synthesis of multi-level combinational circuits with cyclic topologies. The technique can introduce feedback in the substitution/minimization phase of synthesis. The technique can also be used during logic synthesis to optimize a multi-level description by introducing cycles and potentially reducing the size of the resulting network. The technique has been incorporated into a general logic synthesis environment, namely the Berkeley SIS package, and performed trials on benchmark circuits and randomly generated examples. Many of the benchmark circuits were optimized significantly with feedback, with improvements of up to 25%. In trials with thousands of randomly generated examples, very nearly all had cyclic solutions superior to acyclic forms, with average improvements in the range of 5 to 10%.

[0065] Notation

[0066] In the following description, standard notation is used: addition (+) denotes disjunction (OR), multiplication denotes conjunction (AND), and an overline ({overscore (x)}) denotes negation (NOT). A model is used that is at a level of abstraction applicable in the technology-independent phase of logic synthesis. A network is constructed that computes boolean target functions g_(i)(x₁, . . . , x_(m)), 1≦i≦m of boolean input variables x₁, . . . , x_(m). Internally, the network is specified as a collection of nodes and associated with each node is a node function ƒ₁ and an internal variable y_(i), 1≦i≦n. The node function functions depend on internal variables and input variables. A directed edge is drawn from node i to node j if and only if the node function ƒ_(j) associated with node j depends on the internal variable y_(i) associated with node i. A subset of the nodes are designated as output nodes. For output nodes, the targets functions are the requisite output functions. In the following discussion, for the sake of readability, the same symbol for the node function, the target function and the associated internal variable are used in equations. For example, when a symbol ƒ_(i) is used on the left-hand side of an equation it refers to a function, and when used on the right-hand side it refers to the corresponding internal variable.

[0067] A network is combinational if and only of it computes unique boolean output values for each boolean input assignments. If there are “don't care” conditions on the inputs, then it is sufficient if the network computes unique boolean values for input assignments in the “care” set. This computation must hold regardless of the initial state and independently of all timing assumptions. As noted earlier, a cost of a network can be estimated by a measure of the sum of the literals in the factored form of the node expressions of the network. See R. K. Brayton, G. D. Hachtel, C. T. McMullen, and A. L. Sangiovanni-Vincentelli, “Multilevel Logic Synthesis”; Proceedings of the IEEE, Vol. 78, No. 2, pp 264-300, 1990.

[0068] The restriction operation (also known as the cofactor) of a function ƒ with respect to a variable x,

ƒ|_(x=ν),

[0069] refers to the assignment of the constant value νε{0,1} to x. The composition operation of a function ƒ with respect to a variable x and a function g,

ƒ|_(x=g),

[0070] refers to the substitution of g for x in ƒ. A function ƒ depends upon a variable x if and only if ƒ|_(x=0) is not identically equal to ƒ|_(x=1). Call the variables that a function depends upon its support set.

[0071] The universal quantification operation (also known as consensus) yields a function

∀(y₁, . . . , y_(n))ƒ

[0072] that equals 1 if and only if the given function ƒ equals 1 for all 2^(n) assignments of boolean values to the variables y₁, . . . ,y_(n). The existential quantification operation (also known as smoothing) yields a function

∃(y₁, . . . ,_(n))ƒ

[0073] that equals 1 iff the given function ƒ equals 1 for some assignment of boolean values to the variables y₁, . . . y_(n).

[0074] The marginal operation yields a function

ƒ↓(y₁, . . . ,y_(n))

[0075] that equals 1 if and only if the given function ƒ is invariant for all 2^(n) assignments of boolean values to y₁, . . . ,y_(n). For a single variable y, it equals 1 iff ƒ|_(y=0), agrees with ƒ|_(y=1),

ƒ↓y=ƒ|_(y=0)·ƒ|_(y=1)+{overscore (ƒ|_(y=0ƒ|) _(y=1))}

[0076] (For a single variable, the marginal is the complement of what is known as the boolean difference.) For several variables y₁, . . . ,y_(n), the marginal is computed as the universal quantification of the product of the marginals:

ƒ↓(y ₁ , . . . ,y _(n))=∀(y ₁ , . . . ,y _(n)) [(ƒ↓y ₁). . . (ƒ↓y _(n))].

[0077] (With several variables, the marginal is not the same as the complement of the boolean difference, in general.) For example, with

ƒ=x ₁ +x ₂ y ₁ +x ₃ y ₂ +x ₄ y ₁ y ₂,

[0078] then,

ƒ↓y ₁ =x ₁ +x ₃ y ₂ +{overscore (x)} ₂({overscore (x)} ₄ +{overscore (y)} ₂)

ƒ↓y ₂ =x ₁ +x ₂ y ₁ +{overscore (x)} ₃({overscore (x)} ₄ +{overscore (y)} ₁)

ƒ↓(y₁ ,y ₂)=x ₁ +{overscore (x)} ₂ {overscore (x)} ₃ {overscore (x)} ₄

[0079] Note that computing a marginal of n variables requires 0(n) symbolic operations.

[0080] Synthesis

[0081] A goal in multilevel logic synthesis, sometimes called random logic synthesis, is to obtain an optimal multilevel structured representation of a network. Multilevel logic synthesis typically consists of an iterative application of minimization, decomposition and restructuring operations. See “Multilevel Logic Synthesis”, supra. An important operation is substitution, sometimes called “re-substitution”, in which node functions are expressed or re-expressed in terms of other node functions as well their original inputs For example, consider the target functions below:

ƒ₁ ={overscore (x)} ₁ x ₂ {overscore (x)} ₃ +{overscore (x)} ₂(x ₁ +x ₃),

ƒ₂ ={overscore (x)} ₁ {overscore (x)} ₂ {overscore (x)} ₃ +x ₁(x ₂ +x ₃),

ƒ₃ ={overscore (x)} ₃({overscore (x)} ₁ +{overscore (x)} ₂)+{overscore (x)} ₁ {overscore (x)} ₂.

[0082] Using the simplify command of the Berkeley SIS package to perform substitution/minimization, for example substituting ƒ₃ into ƒ₁ results in:

ƒ₁=ƒ₃(x ₁ +x ₂)+{overscore (x)} ₂ x ₃

[0083] Substituting ƒ₃ into ƒ₂ results in:

ƒ₂ ={overscore (x)} ₁ {overscore (x)} ₂ {overscore (x)} ₃ +{overscore (x)} ₁{overscore (ƒ)}₃

[0084] Substituting ƒ₂ and ƒ₃ into ƒ₁ results in:

ƒ₁ ={overscore (x)} ₂ {overscore (x)} ₃+{overscore (ƒ)}₂ƒ₃

[0085] For each target substitution, different sets of functions can be substituted. Each set can be referred to as a substitutional set. Different substitutional sets yield alternative functions of varying cost. In general, augmenting the set of functions available for substitution leaves the cost of the resulting expression unchanged or lowers it. Strictly speaking, this may not always be the case since the algorithms used are heuristic.

[0086] In existing methodologies, a total ordering is enforced among the functions in the substitution phase to ensure that no cycles occur. This choice can influence the cost of the solution. With the ordering shown in FIG. 8, the substitution yields the network shown in FIG. 8 that has a cost of 14.

[0087] Enforcing a hierarchical ordering is limiting because functions near the top of the hierarchy cannot be expressed in terms of others functions. For example, the function at the very top of the hierarchy cannot be expressed in terms of any other functions. Removal of the ordering restriction can lower the cost of implementing the network. For example, if every function can be substituted into every other function, the function shown in FIG. 9, with a cost of 12, can be implemented. The network in FIG. 9 is cyclic, but it is not combinational.

[0088] Another example of target functions is given below:

ƒ ₁(a,b,c)=a{overscore (b)}c+ab{overscore (c)},

ƒ₂(a,b,c)={overscore (a)}b+a{overscore (b)}+bc,

ƒ₃(a,b,c)=ab+a{overscore (c)}+b{overscore (c)}.

[0089] Substituting ƒ₁ into ƒ₂ results in:

ƒ₂ =g ₂(a,b,ƒ ₁)={overscore (ƒ)}₁ b+a{overscore (b)},

[0090] Or ƒ₂ could be substituted into ƒ₁ resulting in:

ƒ₁ =g ₁(b,c,ƒ ₂)=ƒ₂ {overscore (b)}+{overscore (ƒ)} ₂ b.

[0091] Evaluation of the substitution of ƒ₃ into ƒ₁ finds that it isn't very helpful. For a given function ƒ_(i), dependent only on the primary inputs, substitution of a set of functions F₁ yields an expression dependent on a set of functions F₂ ⊂F₁. In general, the resulting expression is not unique. Substitution may yield several alternative functions of varying cost. Also, in general, augmenting the set of functions available for substitution leaves the cost of the resulting expression unchanged or lowers it. Again, strictly speaking, this may not always be the case since the algorithms used in logic synthesis are heuristical, but exceptions are rare.

[0092] As noted, in existing methodologies, a total ordering is enforced among the functions in the substitution phase in order to ensure that no cycles occur. This choice can influence the cost of the solution. For instance, with the ordering shown in FIG. 10, substitution yields:

ƒ₁ =g ₁(a,b,c,)=a(b{overscore (c)}+{overscore (b)}c)

ƒ₂ −g ₂(a,b,ƒ ₁)=b{overscore (ƒ)} ₁ +a{overscore (b)}

ƒ₃ =g ₃(a,b,c,ƒ ₁)=a{overscore (ƒ)} ₁ +b{overscore (c)}

[0093] with a cost of 13, whereas the ordering shown in FIG. 11 yields:

ƒ₁ ={overscore (b)}cƒ ₂ +b{overscore (ƒ)} ₂

ƒ₂ =b(c+{overscore (a)})+a{overscore (b)}

ƒ₃ =a{overscore (ƒ)} ₁ +b{overscore (c)}

[0094] with cost 14. As noted. an ordering is limiting because functions near the top cannot be expressed in terms of very many others. As illustrated, removal of this restriction can lower the cost. For example, if we allow every function to be substituted into every other, the network can be expressed as:

ƒ₁ {overscore (ƒ)} ₂ b+{overscore (ƒ)} ₃ a

ƒ₂={overscore (ƒ)}₁ b+a{overscore (b)}

ƒ₃={overscore (ƒ)}₁ a+b{overscore (c)}

[0095] with a cost of only 12. This network is cyclic, and not combinational. This may be verified according to well known procedures. For example, note that when a=1 and b=1, then ƒ₁={overscore (ƒ)}₂+{overscore (ƒ)}₃,ƒ₂=ƒ₃={overscore (ƒ)}₁. Note that if the order of substitution is restricted to that shown in FIG. 12, the network can be expressed as:

ƒ₁ =a({overscore (ƒ)}₃ +b{overscore (c)})

ƒ₂ =b{overscore (ƒ)} ₁ +a{overscore (b)}

ƒ₃ ={overscore (c)}ƒ ₂ +ab

[0096] the network is combinational an has a cost 12.

[0097] General Approach

[0098] First, assume that the network is given in collapsed form, that is to say, it is given as a set of output functions to implement. The set of functions that are used for substituting are referred to as the substitutional set. Given a substitutional set F_(j), a node expression g_(i) ^((j)) can be generated, or several expressions, g_(i) ^((j. 1)),g_(i) ^((j. 2)), . . . , implementing an output function ƒ_(i). Beginning with the complete set of output functions ƒ₁, . . . , ƒ_(i−1),ƒ_(i+1), . . . , ƒ_(m), down through the empty set, the expressions that are generated in this way are listed for each node. For a three node network, the list is illustrated in FIG. 13. In general, it is expected that the cost will decrease as each column in FIG. 13 is descended. For the empty set the node expression is simply the output function itself, possibly minimized.

[0099] A goal of the synthesis process is to select a choice of node expression that minimizes the cost while satisfying the conditions for stability and uniqueness. For a three node network, choose the i-th expression from the first column, the j-th expression from the second column and the k-th expression from the third column:

Min_(i,j,k):cost(g₁ ^((i)))+cost(g₂ ^((i)))+cost(g₃ ^((k)))

[0100] while satisfying

C(g₁ ^((i)), g₂ ^((j)), g₃ ^((k))).

[0101] For a network with even a modest number of nodes, an exhaustive search is evidently intractable. With n nodes, there are 2^(n−1) substitutional sets for each node, so a total n2^(n−1) possibilities. Fortunately, the structure of the search space immediately suggests the application of heuristics. One such heuristics, branch-and-bound is described.

[0102] A method of producing a combinational circuit includes determining cyclic parameters. Then a combinational circuit is synthesized in accordance with the cyclic parameters. The cyclic parameters can include defining at least one input variable and at least one output variable. A relationship between the input and output variable is defined, whereby the relationship includes a cycle. In addition, internal variables can be defined and can have a relationship to other variables defined that include cycles. The relationships between variables can include structured dependency between the variables and circuit constructs relating to the variables.

[0103] The cyclic parameters can be used in a logic synthesis process. For example, the cyclic parameters can be used in a structuring operation, such as in a substitution phase, of a logic synthesis process.

[0104] Branch-and-Bound

[0105] As noted previously, a goal of the synthesis process is to select a choice of node functions that optimizes various attributes of the network. For example, a network can be synthesized that minimizes the cost while satisfying the condition for combinationality. For each node, the lowest cost expression to be obtained is expected to be obtained with the full substitutional set, i.e., all other node functions. Likewise, it is expected that the highest cost expression to be obtained with the empty set. The cost of a network can be estimated by an area, and the area can be estimated by a literal count or gate count. Another example would be to optimize a network for performance. In one example, the performance can be measured as a delay of the combinational circuit. Other examples of optimization attributes include optimizing with regard to fault tolerance, power consumption, and testability. Following is a description of a branch-and-bound approach, as well as various heuristics that can be used for optimization.

[0106] The “Break-Down” Approach:

[0107] With this approach, the search is performed outside the space of combinational solutions. A branch terminates when it hits a combinational solution. The search begins with a maximally connected network as shown in FIG. 14. For each node ƒ_(i), a node expression g_(i) ⁽¹⁾ is generated based on the complete substitutional set, i.e., all other nodes in the network. The dependency of a node function on another node is referred to as an “edge”. This initial branch has the densest set of edges, and its cost provides a lower bound on the cost of the solution. As edges are excluded in the branch-and-bound process, the cost of the network remains unchanged or increases. Again, since the substitution step is based on heuristics, this may not be strictly true. In the “break-down” approach the following steps are followed:

[0108] 1. Analyze current branch for combinationality. If it is combinational, add it to the solution list. If it is not, select a set of edges to exclude based on the analysis,.

[0109] 2. For each edge in the set, create a new branch. Create a node expression, excluding the incident node from the substitutional set. If the cost of the new branch equal or exceeds that of a solution already found, kill the branch.

[0110] 3. Mark the current branch as “explored.”

[0111] 4. Set the current branch to be the lowest-cost unexplored branch.

[0112] 5. Repeat steps 1-4 until the cost goal is met.

[0113] A sketch of the “break-down” approach is illustrated in FIG. 14. FIG. 14 does not illustrate a complete trace of the search, it only illustrates a trajectory to the solution shown. As shown in FIG. 14, the “break-down” approach yields a cyclic combinational solution with a cost of 13. This network can be mapped, for example, to a circuit with 9 fan-in two gates as shown in FIG. 24.

[0114] For the target function identified earlier,

ƒ₁ ={overscore (x)} ₁ x ₂ {overscore (x)} ₃ +{overscore (x)} ₂(x ₁ +x ₃),

ƒ₂ ={overscore (x)} ₁ {overscore (x)} ₂ {overscore (x)} ₃ +x ₁(x ₂ +x ₃),

ƒ₃ ={overscore (x)} ₃({overscore (x)} ₁ +{overscore (x)} ₂)+{overscore (x)} ₁ {overscore (x)} ₂.

[0115] the technique yields a combinational circuit with a cost of 13 as shown in FIG. 25.

[0116] Several ideas immediately suggest themselves for expediting the search heuristically. For example, the process can be prioritized slightly, at the expense of quality, such as, choosing branches that are “closer” to being combinational. Also, the density of edges can be limited a priori, or the set of edges can be pruned before creating new branches.

[0117]FIG. 15 is a flow chart illustrating the “break-down” approach illustrated in FIG. 15. Flow begins in block 1502 where a densely interconnected network is created. Flow then continues to block 1504 where the network is analyzed to establish the lower cost boundary of the network. Flow then continues to block 1506 were a set of edges is excluded from an unexplored branch of the network.

[0118] Flow continues to block 1508 where the branch is evaluated to determine if the network is combinational. If the network is not combinational flow continues to block 1510 and the branch is terminated and marked as explored. Flow then continues to block 1506 and a set of edges is excluded from an unexplored branch.

[0119] Returning to block 1508, if the network is determined to be combinational then flow continues to block 1512. In block 1512 the cost of the network is determined and evaluated to determine if a cost goal has been met. If the cost goal has not been met flow continues to block 1514 where the cost of the current network is compared to the cost of solutions that have already been found. If the cost of the current network is greater than, or equal to, the cost of a solution that has already been found flow continues to block 1510 and the branch is terminated and marked as explored. If, in block 1514 it is determined that the cost of the current network is less than any solutions that have already been found, then flow continues to block 1516. In block 1516 the current branch is set t the lowest cost unexplored branch. Flow then continues to 1506.

[0120] Returning to block 1512, if it is determined that the cost goal has been met, then flow continues to block 1518 and flow terminates.

[0121] The “Build-Up” Approach:

[0122] With this approach, a search is performed inside the space of combinational solutions. A branch terminates when it hits a non-combinational solution. The search begins with an empty edge set, that is the target functions. Edges are added as the substitutional sets of nodes are augmented. As edges are included, the cost of the network decreases. The process is:

[0123] 1. Analyze current branch for combinationality. If it is not combinational discard it. If it combinational, select a set of edges to include based on the analysis.

[0124] 2. For each edge in the set, create a new branch. Create a new node expression, including the incident node from the substitution set.

[0125] 3. Mark the current branch as “explored”.

[0126] 4. Set the current branch to be the lowest-cost unexplored branch.

[0127] 5. Repeat steps 1-4 until the cost goal is met.

[0128] A sketch of the “build-up” approach is illustrated in FIG. 16. FIG. 16 does not illustrate a complete trace of the search, it only illustrates a trajectory to the solution shown. This technique yields the same cyclic combinational solution for the target functions, as shown in FIG. 25.

[0129] With the “build-up” approach braches cannot be pruned through a lower-bound analysis. However, exploring within the space of combinational solutions ensures that incrementally better solutions are found as the computation proceeds. As an alternative existing acyclic solutions may be used as a starting point. Adding edges reduces costs but potentially introduces cycles.

[0130] In general, the “break-down” approach performs best on dense examples, whereas the “build-up” approach performs better on sparse examples. In addition, a hybrid “build-up”/“break-down” approach is be feasible where features of the two approaches are combined to arrive at a solution.

[0131]FIG. 17 is a flow chart illustrating the “build-up” approach illustrated in FIG. 16. Flow begins in block 1702 where a network with no cycles is created. Flow continues to block 1704 where a branch of the network is selected to analyze. Flow continues to block 1706 where it is determined if the branch is combinational. If the branch is not combinational flow continues to block 1708 where the circuit configuration of the current branch is discarded and the branch marked as explored. Flow continues to block 1710 where the current branch is set to the lowest cost. Flow then continues to block 1706.

[0132] Returning to Block 1706 if it is determined that the branch is combinational flow continues to block 1712 where it is determined if a desired cost goal has been satisfied. If the cost goal has not been satisfied flow continues to block 1714 where an edge is included in the network creating a new branch and a cost of the new branch determined. Flow then continues to block 1710.

[0133] Returning to block 1712, if the cost goal is satisfied then flow continues to block 1716 and flow terminates.

[0134] Analysis of Combinational Circuits for Synthesis

[0135] As noted earlier, a network is combinational if and only if, for each assignment of boolean values to the inputs, all output nodes in the simplified induced network evaluate to definite boolean values. This definition of combinationality is functionally equivalent to that proposed in earlier work. For example, a ternary model for the analysis of cyclic combinational circuits has been proposed. See S. Malik, “Analysis of Cyclic Combinational Circuits,” IEEE Trans. Computer-Aided Design, Vol. 13, No. 7, pp. 950-956, 1994, and R. E. Bryant, “Boolean Analysis of MOS Circuits,” IEEE Trans. Computer-Aided Design, pp. 634-649, 1987. One approach for deciding combinationality is based on ternary-valued simulation that uses a “dual-rail” encoding, 10 for one, 01 for zero, and 11 for “unknown”, to reduce the problem to boolean simulation.

[0136] Analysis

[0137] A symbolic framework is formulated for analysis that obviates the need for ternary-valued simulation. The problem is approached with a “divide-and-conquer” technique: progressively smaller components of the network are analyzed for combinationality. It is noted that if a network's dependency graph can be divided into several distinct strongly connected components, then the analysis may be performed separately on each component. For simplicity, it is assume that each node in the network is an output node.

[0138] Symbolic Framework

[0139] Input assignments are analyzed, when substituted into a node function, to determine which inputs force the node function to a definite boolean value, independent of all internal variables in its support set. For a node function ƒ_(i), let I_(i) be the set of internal variables that it depends upon. Then:

ƒ_(i)↓I_(i)

[0140] holds, then ƒ_(i) has a definite boolean value equal to the corresponding target function g_(i). For a network N, to obtain the restriction:

N|ƒ_(i),

[0141] the node ƒ_(i) is removed, and the corresponding target function g_(i) is substituted for the internal variable y_(i) in every node function in which it appears. This restriction is an auxiliary construct for analysis, not an attempt to redesign the network under consideration.

[0142] Let C(N) denote the necessary and sufficient condition for combinationality, expressed as a function of the input variables. The following provides a technique to compute this condition:

C(N)=[ƒ₁ ↓I ₁ ]·C(N| _(f1))+. . . +[ƒ_(n) ↓I _(n) ]·C(N| _(ƒn)).

[0143] For a network with cycles, for each input assignment at least one node function needs to evaluate to a definite boolean value independently of all the others. Indeed, if none of the functions evaluates to a definite boolean value, then no simplifications are possible and the network is not combinational. A function ƒ_(i) evaluates to a definite boolean value independently of the others if and only if the marginal holds,

ƒ_(i)↓I_(i).

[0144] Now, if a node function ƒ_(i) evaluates to a definite boolean value, this value is given by the corresponding target function g_(i). If this node is cut from the network, then the rest of the network must be combinational, that is,

C(N|_(ƒi))

[0145] Indeed, if a component of the network viewed in isolation is not combinational, then the entire network is not combinational.

[0146] Several examples will illustrate the analysis.

d={overscore (c)}({overscore (a)}={overscore (b)})+{overscore (ab)}

e={overscore (a)}b{overscore (c)}+{overscore (b)}(a+c)

ƒ={overscore (b)}({overscore (a)}+{overscore (c)})+ab.

EXAMPLE 1

[0147] Consider the network N₁, shown in FIG. 18. Note that the dependency graph is a single cycle. A necessary and sufficient condition for combinationality is $\begin{matrix} {\left. {{C\left( N_{1} \right)} = {{\left\lbrack d\downarrow e \right\rbrack \cdot {C\left( N_{1} \right.}}d}} \right) +} \\ {\left. {\left\lbrack e\downarrow f \right\rbrack \cdot {C\left( N_{1} \right.}_{e}} \right) +} \\ {\left. {\left\lbrack f\downarrow d \right\rbrack \cdot {C\left( N_{1} \right.}_{f}} \right).} \end{matrix}$

[0148] The marginals are

d↓e=a+{overscore (bc)}

e↓ƒ=c+a{overscore (b)}

ƒ↓d=b.

[0149] Because there is a single cycle,

C(N ₁|_(d))=C(N ₁|_(e))=C(N ₁|_(ƒ))≡1.

[0150] Thus,

C(N ₁)=a+{overscore (bc)}+c+a{overscore (b)}+b=1.

[0151] It is concluded that the network is combinational for all input assignments.

EXAMPLE 2

[0152] Now, consider the network N₂, shown in FIG. 19. Note that the dependency graph is the complete graph on three nodes. The necessary and sufficient condition for combinationality is $\begin{matrix} {\left. {{C\left( N_{2} \right)} = {\left\lbrack d\downarrow\left( {e,f} \right) \right\rbrack \cdot {C\left( N_{2} \right.}_{d}}} \right) +} \\ {\left. {\left\lbrack e\downarrow\left( {d,f} \right) \right\rbrack \cdot {C\left( N_{2} \right.}_{e}} \right) +} \\ \left. {\left\lbrack f\downarrow\left( {d,e} \right) \right\rbrack \cdot {C\left( N_{2} \right.}_{f}} \right) \end{matrix}$

d={overscore (b)}ƒ+{overscore (c)}e

e=d(a+{overscore (ƒ)})+{overscore (b)}c

ƒ=a{overscore (e)}+{overscore (b)}d.

[0153] The marginals are

d↓(e,ƒ)=bc

e↓(d,ƒ)={overscore (b)}c

ƒ↓(d,e)={overscore (a)}b.

[0154] For the restriction N₂|_(d), compute

e| _(d) ={overscore (b)}(a+c)+{overscore (acƒ)}

ƒ|_(d) ={overscore (b)}({overscore (a)}+{overscore (c)})+a{overscore (e)}

[0155] For this restriction, the marginals are

(e| _(d))↓ƒ=a+c

(ƒ|_(d))↓e={overscore (a)}+{overscore (bc)}

[0156] Now, recursively, $\begin{matrix} {\left. {{\left. {\left. {C\left( N_{2} \right.}_{d} \right) = \left. \left\lbrack \left( e \right._{d} \right)\downarrow f \right.} \right\rbrack \cdot (1)} + \left. \left\lbrack \left( f \right._{d} \right)\downarrow e \right.} \right\rbrack \cdot (1)} \\ {= {a + c + \overset{\_}{a} + {\overset{\_}{b}\overset{\_}{c}}}} \\ {= 1.} \end{matrix}$

[0157] Similarly, compute

C(N ₂|_(e))=0

C(N ₂|_(ƒ))={overscore (b)}+c

[0158] Thus, $\begin{matrix} {{C\left( N_{2} \right)} = {{\left( {b\quad c} \right) \cdot (1)} + {\left( {\overset{\_}{b}c} \right) \cdot (0)} + {\left( {\overset{\_}{a}b} \right) \cdot \left( {\overset{\_}{b} + c} \right)}}} \\ {= {b\quad c}} \end{matrix}$

[0159] It is concluded that the network is combinational iff b=c=1.

EXAMPLE 3

[0160] Now, consider the network shown in FIG. 20A.

e={overscore (ƒ)}(a{overscore (h)}+c)+d{overscore (h)}+{overscore (b)}

ƒ={overscore (adg)}+a({overscore (b)}d+bc)

g={overscore (a)}b{overscore (c)}+{overscore (h)}(a{overscore (e)}+{overscore (a)}d+{overscore (b)}c)

h={overscore (ƒ)}(a(c+d)+cd)

[0161] The target functions for this network are

e=a{overscore (cd)}+d(c+{overscore (a)})+{overscore (b)}

ƒ=ad(c+{overscore (b)})+{overscore (d)}({overscore (abc)}+bc)

g={overscore (ac)}(d+b)+c(a{overscore (b)}d+{overscore (d)}({overscore (ab)}+ab))

h=a{overscore (b)}c{overscore (d)}+d(ab{overscore (c)}+{overscore (a)}c)

[0162] The network is combinational if and only if the following condition holds $\begin{matrix} {\left. {\left. {{C(N)} = {\left\lbrack e\downarrow\left( {f,h} \right) \right\rbrack \cdot {C\left( N \right.}_{e}}} \right) + {\left\lbrack f\downarrow g \right\rbrack \cdot {C\left( N \right.}_{f}}} \right) +} \\ {\left. {\left. {\left\lbrack g\downarrow\left( {e,h} \right) \right\rbrack \cdot {C\left( N \right.}_{g}} \right) + {\left\lbrack h\downarrow f \right\rbrack \cdot {C\left( N \right.}_{h}}} \right).} \end{matrix}$

[0163] Proceeding on a case basis:

[0164] Case I:

[0165]

[0166] Suppose that e assumes a definite boolean value independently of ƒ and h:

e↓(ƒ,h)={overscore (acd)}+{overscore (b)}

[0167] Given this predicate, the sub-network N|_(e) is obtained by substituting the target function for e into g, see FIG. 20B:

ƒ={overscore (ad)}g+a({overscore (b)}d+bc)

g| _(e) ={overscore (a)}b{overscore (c)}+{overscore (h)}(c(a{overscore (d)}+{overscore (b)})+d(b{overscore (c)}+{overscore (a)}))

h={overscore (ƒ)}(a(c+d)+cd)

[0168] Note that N|_(e) contains a single cycle through nodes ƒ, h and g|_(e). There are three subcases:

[0169] 1) suppose that ƒ assumes a definite boolean value independently of g|_(e):

ƒ↓(g|_(e))+a+d,

[0170] 2) suppose that g|_(e) assumes a definite boolean value independently of h:

(g| _(e))↓h=b(acd+{overscore (ad)})+{overscore (c)}(a{overscore (b)}+{overscore (a)}b+{overscore (d)})

[0171] 3) suppose that h assumes a definite boolean value independently of ƒ:

h↓ƒ={overscore (d)}({overscore (a)}+{overscore (c)})+{overscore (ac)}

[0172] In each case, the assumption breaks the cycle. Assembling the three cases,

C(N| _(e))=[ƒ↓(g| _(e))]+[(g| _(e))↓h]+[h↓ƒ]≡1.

[0173] It is concluded that the sub-network N|_(e) is combinational.

[0174] Case II:

[0175] Suppose that ƒ assumes a definite boolean value independently of g:

ƒ↓g=a+d.

[0176] Given this predicate, the sub-network N|_(ƒ) is obtained by substituting the target function for ƒ into h, see FIG. 20C,

e={overscore (ƒ)}(a{overscore (h)}+c)+d{overscore (h)}+{overscore (b)}

g={overscore (a)}b{overscore (c)}+{overscore (h)}(a{overscore (e)}+{overscore (a)}d+{overscore (b)}c)

h| _(ƒ) =a{overscore (b)}c{overscore (d)}+d(ab{overscore (c)}+{overscore (a)}c)

[0177] This sub-network is acyclic and hence combinational: C(N|_(ƒ))≡1.

[0178] Case III:

[0179] Suppose that g assumes a definite boolean value independently of e and h:

g↓(e,h)={overscore (a)}({overscore (d)}(b+{overscore (c)})+b{overscore (c)})

[0180] Given this predicate, the sub-network N|_(g) is obtained by substituting the target function for g into ƒ, see FIG. 20D,

e={overscore (ƒ)}(a{overscore (h)}+c)+d{overscore (h)}+{overscore (b)}

ƒ|_(g) =a({overscore (b)}d+bc)+{overscore (d)}({overscore (abc)}+bc)

h={overscore (ƒ)}(a(c+d)+cd)

[0181] This sub-network is acyclic and hence combinational: C(N|_(g))≡1.

[0182] Case IV:

[0183] Finally, suppose that h assumes a definite boolean value independently of ƒ:

h↓ƒ={overscore (d)}({overscore (a)}+{overscore (c)})+{overscore (ac)}

[0184] Given this predicate, the sub-network N|_(h) is obtained by substituting the target function for h into e, see FIG. 20E,

e| _(h) =d({overscore (ac)}+ac)+{overscore (ƒ)}(a{overscore (d)}+c)+{overscore (b)}

ƒ={overscore (ad)}g+a({overscore (b)}d+bc)

g={overscore (a)}b{overscore (c)}+{overscore (h)}(a{overscore (e)}+{overscore (a)}d+{overscore (b)}c)

[0185] Analyzing N|_(h) in the same manner as in Case I, we find that C(N|_(h))≡1

[0186] Assembling the four cases, $\begin{matrix} {{C(N)} = {{\left\lbrack e\downarrow\left( {f,h} \right) \right\rbrack \cdot (1)} + {\left\lbrack f\downarrow g \right\rbrack \cdot (1)} +}} \\ {{{\left\lbrack g\downarrow\left( {e,h} \right) \right\rbrack \cdot (1)} + {\left\lbrack h\downarrow f \right\rbrack \cdot (1)}}} \\ {\equiv 1} \end{matrix}$

[0187] Thus we conclude that the network in FIG. 20A is combinational.

[0188] Complexity

[0189] It has been shown that the problem of analyzing a network to determine if it is combinational is co-NP-complete. See “Analysis of Cyclic Combinational Circuits” supra. In the recursive decomposition of the necessary and sufficient condition for combinationality, one may encounter the same sub-network several times. Restriction is invariant to order so that for any i,j,

(N| _(ƒi))|_(ƒj)=(i N|_(ƒj))|_(ƒi)

[0190] It is not necessary to recompute the condition for the same component encountered twice. For instance, in a network with nodes, ƒ₁,ƒ₂, . . . , compute

C(N)=(ƒ₁ ↓y ₁)·C(N| _(ƒ1))+(ƒ₂ ↓y ₂)·C(N| _(ƒ2))+ . . .

[0191] Recursively, compute

C(N| _(ƒ1))=((ƒ₂|_(y1))|_(y2))·C((N| _(ƒ1))|_(ƒ2))+ . . .

[0192] and

C(N| _(ƒ2))=((ƒ₁|_(y2))|_(y1))·C((N| _(ƒ2))|_(ƒ1))+ . . .

[0193] It is not necessary to recompute (N|_(f2))|_(f1), as it is equal to (N|_(f1))|_(f2).

[0194] For a network corresponding to a complete graph on n nodes, the analysis requires on the order of n·2^(n) steps (there are 2^(n) subsets of n nodes, each of which has n terms to evaluate). For less densely connected networks, the analysis is, of course, less complex.

[0195] Timing

[0196] For timing analysis, an approach is to transform a cyclic circuit into an equivalent acyclic one. See S. A. Edwards, “Marking Cyclic Circuits Acyclic,” Design Automation Conf., 2003. Timing information is then obtained through functional timing analysis of the acyclic circuit. Timing analysis can be performed directly on a cyclic combinational circuit. In fact, timing analysis is closely related to combinationality analysis. In timing analysis, the goal is to find the longest sensitized path; in combinationality analysis, the goal is to ascertain whether there are any sensitized cycles (i.e., sensitized paths that bite their own tail).

[0197] Synthesis Algorithms

[0198] As noted, a goal in multilevel logic synthesis (also sometimes called random logic synthesis) is to obtain the optimal multilevel, structured representation of a network. The process typically consists of an iterative application of minimization, decomposition, and restructuring operations. See “Multilevel Logic Synthesis” supra. An important operation is substitution, in which node functions are expressed, or re-expressed, in terms of other node functions as well as of their original inputs. Our strategy is to introduce combinational cycles in the substitution phase. Several approaches have been explored, including dynamic programming and branch-and-bound algorithms. The interplay of analysis and synthesis in the design process is discussed.

[0199] The analysis is formulated recursively. Accordingly, it permits caching analysis results for common sub-networks through iterations of the search for a solution. Suppose that in the course of a search for a low-cost combinational solution a network N₁, is considered, with node functions.

ƒ₁, . . . ,ƒ_(n).

[0200] Analysis for combinationality entails evaluating the expression C(N₁), discussed earlier. Next, suppose that a network N₂ is considered, with node functions

ƒ′₁, . . . ,ƒ′_(n).

[0201] Analysis entails evaluating C(N₂). Now suppose that some of the node functions in N₁ are identical to those in N₂. Let S be the subset of nodes that are identical:

∀iεS,ƒ_(i)≡ƒ′_(i).

[0202] The evaluation of C(S) figures in both C(N₁) and C(N₂), and so it need not be repeated. If, in the process of evaluating C(N₁), we find that C(S)=0, then we rule out N₁ as well as N₂ (and all other networks that contain S). Otherwise, we find that C(S)≡1, and we need not re-evaluate it when evaluating N₂ (or any other network that contains S). This is illustrated by the following examples.

[0203] Example 1

[0204] Consider again the example in FIG. 20A. Suppose that the network is constructed for nodes ƒ and g shown in FIG. 21, assuming that nodes e and h are given.

[0205] Analysis

ƒ={overscore (agh)}+a(de+g)

g={overscore (aƒh)}+ƒ(a{overscore (e)}+{overscore (b)}c)

[0206] accordingly this component is not combinational. Thus, we exclude this pair of node functions as candidates for ƒ and g.

EXAMPLE 2

[0207] Now, suppose that the candidates for nodes e,ƒ and g are constructed as shown in FIG. 22.

e={overscore (ƒ)}(a{overscore (h)}+c)+d{overscore (h)}+{overscore (b)}

ƒ={overscore (adg)}+a({overscore (b)}d+bc)

g={overscore (a)}b{overscore (c)}+{overscore (h)}(a{overscore (e)}+{overscore (a)}d+{overscore (b)}c)

[0208] Analysis confirms that this component is combinational. Proceeding to select a node function for h, the candidates are:

h ₁ =c(a{overscore (d)}e+{overscore (a)}d)+d{overscore (e)}

h ₂={overscore (ƒ)}(a(c+d)+cd)

h ₃ ={overscore (g)}(d(b{overscore (c)}+{overscore (a)})+{overscore (b)}c)

h ₄ =c{overscore (f)}(a+d)+d{overscore (e)}

h ₅ ={overscore (ƒg)}(c+d)

h ₆ +c{overscore (ƒg)}+d{overscore (e)}

[0209] When analyzing networks constructed with these candidates for h, it need not re-evaluate the component e, ƒ, g from FIG. 22. It is found that if h₂ is combined with this component, it yields a combinational network (that shown in FIG. 20).

[0210] Conclusion

[0211] As illustrated above, cyclic solutions are not a rarity and they can readily be found for most sufficiently rich circuits. Trials have been run on a range of randomly generated examples, as well as some of the usual suspects, namely the Espresso and LGSynth93 benchmarks. See the benchmarks in the Proceedings of the IEEE International Workshop on Logic Synthesis, May 1993, and by R. K. Brayton, G. D. Hachtel, C. T. McMullen, and A. L. Sangiovanni-Vincentelli, “Logic Minimization Algorithms for VLSI Synthesis”, Kluwer Academic Publishers, Boston, 1984. It is noted that solutions for many of the examples have deeply nested loops, with dozens or even hundreds of cycles.

[0212] In the trials, the input generally consists of a collapsed network, that is to say expressions for the output functions ƒ₁, . . . ,ƒ_(p) expressed in terms of the primary inputs. A substitution operation is performed with the simplify command in the Berkeley SIS package, with parameters: method=nocomp/snocomp, dctype=all, filter=exact, accept=fct-lits. The cost given is that of the resulting network, as measured by the literal count of the nodes expressed in factored form. This is compared to the cost of the network obtained by executing simplify directly on the collapsed network, with the same parameters.

[0213] Since randomly generated functions are typically very dense, they are not generally representative of functions encountered in practice. Nevertheless, it is interesting to examine the performance of the CYCLIFY program on these. Table 1 below lists the results of some tests comparing the acyclic (simplify) and cyclic (cyclify) costs of benchmarks, and the corresponding improvements. Table 2 lists cost improvements of CYCLIFY over the Berkeley SIS Simplify for randomly generated networks. TABLE 1 Simplify Cyclify Improvements Time (H:M:S) Espresso Benchmarks P82 104 90 13.5% 00:02:03 T4 109 89 18.3% 00:00:02 Dc2 130 123 5.4% 00:01:34 Apla 185 131 29.2% 00:00:31 Tms 185 158 14.6% 00:01:17 M2 231 207 10.4% 00:06:02 T1 273 206 24.5% 00:21:40 B4 292 281 3.8% 00:09:50 Exp 320 260 18.8% 00:33:26 In3 361 333 7.8% 00:22:06 In2 397 291 26.7% 00:00:45 B10 398 359 9.8% 00:08:29 Gary 421 404 4.0% 00:18:15 M4 439 421 6.2% 00:07:22 In0 451 434 3.8% 00:05:53 Max1025 793 774 2.4% 00:00:29 LGSynth93 Benchmark ex6 85 76 10.6% 00:00:06 inc 116 112 3.4% 00:00:04 bbsse 118 106 10.2% 00:00:08 sse 118 106 10.2% 00:00:10 5xp1 123 109 11.4% 00:00:01 S386 131 113 13.7% 00:00:08 bw 171 163 4.7% 00:15:41 S400 179 165 7.8% 00:02:12 S382 180 165 8.3% 00:02:30 S526n 194 189 2.6% 00:00:29 S526 196 188 4.1% 00:00:25 cse 212 177 16.5% 00:00:05 clip 213 193 9.4% 00:00:01 pma 226 211 6.6% 00:04:30 dk16 248 233 6.0% 00:00:53 S510 260 227 12.7% 00:000:05 ex1 309 276 10.7% 00:09:11 S1 332 322 3.0% 00:03:34 duke2 415 397 4.3% 00:02:58 styr 474 443 6.5% 00:03:24 planet1 550 517 6.0% 05:09:19 planet 555 504 9.2% 02:57:47 S1488 622 589 5.3% 00:47:04 S1494 659 634 3.8% 05:19:41 table3 1287 1175 8.7% 12:39:20 table5 1059 1007 4.9% 14:10:10 S298 2598 2445 5.9% 10:15:13 ex1010 3703 3593 3.0% 10:57:58

[0214] TABLE 2 Randomly Generated Networks Cyclic Solns Avg. Improvement # In # Out Found Improvement Range 5 5 100% 8.5% 3%-17% 5 7  96% 9.1% 0%-18% 5 10 100% 12.0% 2%-20% 5 15 100% 13.4% 7%-23% 5 20 100% 14.2% 8%-18% 7 10  96% 5.6% 0%-11% 7 15  88% 3.6% 0%-10%

[0215] As illustrated, a paradigm shift in combinational circuit design is appropriate: combinational logic should no longer be thought of as acyclic in theory or in practice, since nearly all combinational circuits are best designed with cycles. A general methodology has been formulated for the synthesis of cyclic combinational circuits, and incorporated into a logic synthesis environment. Search process have been described that, while heuristic, can effectively tackle circuits of sizes that are of practical importance. The implementation of more sophisticated search processes, such as stochastic search, and parallelization are obvious evolutions of the project. Furthermore, the techniques described can be extended to the technology mapping phase of logic synthesis.

[0216] The circuit synthesis process described above can be implemented in a wide variety of processor devices. For example, a logic synthesis system can include processors that accept a high-level description language specification of variables for the circuit configuration. One or more conventional desktop computer systems can be used to provide the front end and back end processing necessary to provide the processing for the logic synthesis system. Those skilled in the art will be able to construct a suitable logic synthesis system to provide the functionality and operations described herein. An example of a suitable computer is illustrated in FIG. 26 and is described below.

[0217]FIG. 26 shows an exemplary computer 2600 such as might comprise a computer system for executing the logic synthesis operations described above. The computer 2600 can be a stand-alone computer or can be operated in a networked environment that permits communication with other computers. The computer 2600 operates under control of a central processor unit (CPU) 2602, such as a “Pentium” microprocessor and associated integrated circuit chips, available from Intel Corporation of Santa Clara, Calif., USA. A computer user can input commands and data from a keyboard and computer mouse 2604, and can view inputs and computer output at a display 2606. The display is typically a video monitor or flat panel display. The computer 2600 also typically includes a direct access storage device (DASD) 2608, such as a hard disk drive. A memory 2610 typically comprises volatile semiconductor random access memory (RAM). Each computer preferably includes a program product reader 2612 that accepts a program product storage device 2614, from which the program product reader can read data (and to which it can optionally write data). The program product reader can comprise, for example, a disk drive, and the program product storage device can comprise removable storage media such as a magnetic floppy disk, a CD-R disc, a CD-RW disc, or DVD disc.

[0218] The computer 2600 can communicate with any other computers, if networked, over a computer network 2620 (such as the Internet or an intranet) through a network interface 2618 that enables communication over a connection 2622 between the network 2620 and the computer. The network interface 2618 typically comprises, for example, a Network Interface Card (NIC) or a modem that permits communications over a variety of networks.

[0219] The CPU 2602 operates under control of programming instructions that are temporarily stored in the memory 2610 of the computer 2600. When the programming instructions are executed, the computer performs its functions. Thus, the programming steps implement the functionality of the logic synthesis system described above. The programming steps can be received from the DASD 2608, through the program product storage device 2614, or through the network connection 2622. The program product storage drive 2612 can receive a program product 2614, read programming steps recorded thereon, and transfer the programming steps into the memory 2610 for execution by the CPU 2602. As noted above, the program product storage device can comprise any one of multiple removable media having recorded computer-readable instructions, including magnetic floppy disks and CD-ROM storage discs. Other suitable program product storage devices can include magnetic tape and semiconductor memory chips. In this way, the processing steps necessary for operation in accordance with the invention can be embodied on a program product.

[0220] Alternatively, the program steps can be received into the operating memory 2610 over the network 2620. In the network method, the computer receives data including program steps into the memory 2610 through the network interface 2618 after network communication has been established over the network connection 2622 by well-known methods that will be understood by those skilled in the art without further explanation. The program steps are then executed by the CPU 2602 thereby comprising a computer process.

[0221] Thus, the invention provides a new way of synthesizing multi-level combinational circuits with cyclic topologies. The techniques, applicable in logic synthesis, and in particular in the structuring phase of logic synthesis, optimize a multi-level description, introducing feedback and potentially optimizing the network.

[0222] The foregoing description details certain embodiments of the invention. It will be appreciated, however, that no matter how detailed the foregoing appears, the invention may be embodied in other specific forms without departing from its spirit or essential characteristics. The described embodiments are to be considered in all respects only as illustrative and not restrictive and the scope of the invention is, therefore, indicated by the appended claims rather than by the foregoing description. All changes which come with the meaning and range of equivalency of the claims are to be embraced within their scope. 

1. A method of producing a combinational circuit, the method comprising: determining cyclic parameter; and synthesizing a combinational circuit in accordance with the determined cyclic parameters.
 2. A method as defined in claim 1, wherein determining cyclic parameters further comprises: defining at least one input variable; defining at least one output variable; and defining a relationship between the at least one input and at least one output variable whereby the relationship includes a cycle.
 3. A method as defined in claim 2, further including at least one internal variable.
 4. A method as defined in claim 2, wherein the relationship includes structured dependency between an input and output variable.
 5. A method as defined in claim 1, wherein determining cyclic parameters further comprises: defining at least one input variable; defining at least one internal variable; and defining a relationship between the at least one input and at least one internal variable whereby the relationship includes a cycle.
 6. A method as defined in claim 5, wherein at least one internal variable is an output variable.
 7. A method as defined in claim 5, wherein the relationship includes structured dependency between an input and internal variable.
 8. A method as defined in claim 1, wherein the cyclic parameters are used in a logic synthesis process.
 9. A method as defined in claim 8, wherein the cyclic parameters are used in a structuring operation of the logic synthesis process.
 10. A method as defined in claim 9, wherein the structuring operation includes a substitution phase of the logic synthesis process.
 11. A method as defined in claim 1, wherein the method of producing a combinational circuit is optimized.
 12. A method as defined in claim 11, wherein the combinational circuit is optimized with regard to cost.
 13. A method as defined in claim 12, wherein the cost is measured as an area.
 14. A method as defined in claim 13, wherein the area is determined by a literal count.
 15. A method as defined in claim 13, wherein the area is determined by a gate count.
 16. A method as defined in claim 11, wherein the combinational circuit is optimized with regard to performance.
 17. A method as defined in claim 16, wherein the performance is measured as a delay of the combinational circuit.
 18. A method as defined in claim 11, wherein the combinational circuit is optimized with regard to fault tolerance.
 19. A method as defined in claim 11, wherein the combinational circuit is optimized with regard to power consumption.
 20. A method as defined in claim 11, wherein the combinational circuit is optimized with regard to testability.
 21. A method as defined in claim 1, wherein synthesizing comprises: creating a network with no cycles; introducing a cycle into the network; determining if the network is combinational; and repeating introduction of cycles into the network until a desired combinational circuit is implemented.
 22. A method as defined in claim 21, wherein the combinational circuit is optimized.
 23. A method as defined in claim 22, wherein the combinational circuit is optimized with regard to cost.
 24. A method as defined in claim 23, wherein the cost is measured as an area.
 25. A method as defined in claim 24, wherein the area is determined by a literal count.
 26. A method as defined in claim 24, wherein the area is determined by a gate count.
 27. A method as defined in claim 22, wherein the combinational circuit is optimized with regard to performance.
 28. A method as defined in claim 27, wherein the performance is measured as a delay of the combinational circuit.
 29. A method as defined in claim 22, wherein the combinational circuit is optimized with regard to fault tolerance.
 30. A method as defined in claim 22, wherein the combinational circuit is optimized with regard to power consumption.
 31. A method as defined in claim 22, wherein the combinational circuit is optimized with regard to testability.
 32. The method as defined in claim 21, wherein introducing, determining and repeating is performed in a structuring operation of logic synthesis.
 33. A method as defined in claim 32, wherein the structuring operation includes a substitution phase of logic synthesis.
 34. A method as defined in claim 1, wherein synthesizing comprises: creating a densely interconnected network; excluding edges from the network; determining if the network is combinational; and repeating excluding edges the network until a desired combinational circuit is implemented.
 35. A method as defined in claim 34 wherein the combinational circuit is optimized.
 36. A method as defined in claim 35, wherein the combinational circuit is optimized with regard to cost.
 37. A method as defined in claim 36, wherein the cost is measured as an area.
 38. A method as defined in claim 37, wherein the area is determined by a literal count.
 39. A method as defined in claim 37, wherein the area is determined by a gate count.
 40. A method as defined in claim 35, wherein the combinational circuit is optimized with regard to performance.
 41. A method as defined in claim 40, wherein the performance is measured as a delay of the combinational circuit.
 42. A method as defined in claim 35, wherein the combinational circuit is optimized with regard to fault tolerance.
 43. A method as defined in claim 35, wherein the combinational circuit is optimized with regard to power consumption.
 44. A method as defined in claim 35, wherein the combinational circuit is optimized with regard to testability.
 45. The method as defined in claim 34, wherein introducing, determining and repeating is performed in a structuring operation of logic synthesis.
 46. A method as defined in claim 45, wherein the structuring operation includes a substitution phase of logic synthesis.
 47. A method of logic synthesis, the method comprising: determining cyclic parameters; and using the cyclic parameters during synthesis of a combinational circuit.
 48. A method as defined in claim 47, wherein the cyclic parameters are used in a structuring operation of logic synthesis.
 49. A method as defined in claim 48, wherein the structuring operation includes a substitution phase of the logic synthesis.
 50. A logic synthesizer comprising: a set of cyclic parameters; and a processor configured to synthesize a combinational circuit in accordance with the determined cyclic parameters.
 51. A synthesizer as defined in claim 50, wherein the cyclic parameters further comprises: at least one input variable; at least one output variable; and a relationship between the at least one input and at least one output variable whereby the relationship includes a cycle.
 52. A synthesizer as defined in claim 51, further including at least one internal variable.
 53. A synthesizer as defined in claim 51, wherein the relationship includes structured dependency between an input and output variable.
 54. A synthesizer as defined in claim 50, wherein the cyclic parameters further comprises: at least one input variable; at least one internal variable; and a relationship between the at least one input and at least one internal variable whereby the relationship includes a cycle.
 55. A synthesizer as defined in claim 54, wherein at least one internal variable is an output variable.
 56. A synthesizer as defined in claim 54, wherein the relationship includes structured dependency between an input and internal variable.
 57. A method as defined in claim 50, wherein the cyclic parameters are used in a logic synthesis process.
 58. A synthesizer as defined in claim 57, wherein the cyclic parameters are used in a structuring operation of the logic synthesis process.
 59. A synthesizer as defined in claim 58, wherein the structuring operation includes a substitution phase of the logic synthesis process.
 60. A synthesizer as defined in claim 50, wherein the synthesized combinational circuit is optimized.
 61. A synthesizer as defined in claim 60, wherein the combinational circuit is optimized with regard to cost.
 62. A synthesizer as defined in claim 61, wherein the cost is measured as an area.
 63. A synthesizer as defined in claim 62, wherein the area is determined by a literal count.
 64. A synthesizer as defined in claim 62, wherein the area is determined by a gate count.
 65. A synthesizer as defined in claim 60, wherein the combinational circuit is optimized with regard to performance.
 66. A synthesizer as defined in claim 65, wherein the performance is measured as a delay of the combinational circuit.
 67. A synthesizer as defined in claim 60, wherein the combinational circuit is optimized with regard to fault tolerance.
 68. A synthesizer as defined in claim 60, wherein the combinational circuit is optimized with regard to power consumption.
 69. A synthesizer as defined in claim 60, wherein the combinational circuit is optimized with regard to testability.
 70. A synthesizer as defined in claim 50, wherein the processor creates a network with no cycles, and then introduces cycles into the network and determines if the network is combinational, and then it repeats introducing cycles into the network until a desired combinational circuit, is implemented.
 71. A synthesizer as defined in claim 50, wherein the processor creates a densely interconnected network, and then excludes edges from the network and determines if the network is combinational, and then repeats excluding edges from the network until a desired combinational circuit is implemented. 